Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
Funciones de Firebase: el valor del argumento "datos" no es un documento válido de Firestore

Estoy tratando de seguir un tutorial de fireship con oAuth2 con el siguiente código.

Todas las funciones se inicializaron correctamente, pero apareció este mensaje de error cuando intenté autorizar la aplicación a través de Twitter. El mensaje de error está debajo.

⚠ funciones: Error: el valor del argumento "datos" no es un documento válido de Firestore. No se puede usar "indefinido" como valor de Firestore (se encuentra en el campo "accessToken"). Si desea ignorar valores indefinidos, habilite ignoreUndefinedProperties .

El código está abajo:

 const functions = require('firebase-functions') const admin = require('firebase-admin') admin.initializeApp() // Database reference const dbRef = admin.firestore().doc('tokens/demo') const TwitterApi = require('twitter-api-v2').default const twitterClient = new TwitterApi({ clientId: 'aabbcc', clientSecret: 'aabbcc', }) const callbackURL = 'http://127.0.0.1:5001/primussoft-74a49/us-central1/callback' // STEP 1 - Auth URL exports.auth = functions.https.onRequest(async (request, response) => { const { url, codeVerifier, state } = twitterClient.generateOAuth2AuthLink( callbackURL, { scope: ['tweet.read', 'tweet.write', 'users.read', 'offline.access'] } ) // store verifier await dbRef.set({ codeVerifier, state }) response.redirect(url) }) // STEP 2 - Verify callback code, store access_token exports.callback = functions.https.onRequest(async (request, response) => { const { state, code } = request.query const dbSnapshot = await dbRef.get() const { codeVerifier, state: storedState } = dbSnapshot.data() if (state !== storedState) { return response.status(400).send('Stored tokens do not match!') } const { client: loggedClient, accessToken, refreshToken, } = twitterClient.loginWithOAuth2({ code, codeVerifier, redirectUri: callbackURL, }) await dbRef.set({ accessToken, refreshToken }) const { data } = loggedClient.v2.me() // start using the client if you want response.send(data) }) // STEP 3 - Refresh tokens and post tweets exports.tweet = functions.https.onRequest(async (request, response) => { const { refreshToken } = dbRef.get().data() const { client: refreshedClient, accessToken, refreshToken: newRefreshToken, } = twitterClient.refreshOAuth2Token(refreshToken) await dbRef.set({ accessToken, refreshToken: newRefreshToken }) // const { data } = await refreshedClient.v2.tweet( // nextTweet.data.choices[0].text // ) const { dataone } = { id: 'testid', text: 'a tweet from me' } response.send(dataone) }) exports.tweet = functions.https.onRequest((request, response) => {})

De hecho, estaba tratando de seguir un tutorial de fireship en este enlace https://youtu.be/V7LEihbOv3Y

Cualquier ayuda sería muy apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El método refreshOAuth2Token devuelve una promesa. Intente agregar await como se muestra a continuación:

 const { client: refreshedClient, accessToken, refreshToken: newRefreshToken, } = await twitterClient.refreshOAuth2Token(refreshToken)
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda